import { ref, unref } from 'vue';

export interface UseCrudOptions {
  // 定义API方法接口
  api?: {
    list: (data?: any) => Promise<any[]>;
    create: (data?: any) => Promise<void>;
    update: (data?: any) => Promise<void>;
    delete: (data?: any) => Promise<void>;
  };
  modalMap?: {
    update?: string;
    create?: string;
  };
}

// useCrud自定义hook，用于管理CRUD操作
export default function useCrud(options: UseCrudOptions) {
  const api = options.api;

  // 创建ref引用，用于获取Table组件实例
  const tableRef = ref();

  // 创建ref引用，用于获取Modal组件实例
  const modalRef = ref();

  // 获取Modal标题
  const modalMap = options.modalMap || {
    create: '新增',
    update: '编辑',
  };

  // 使用ref创建响应式数据列表，类型为any[]
  const dataList = ref<any[]>([]);

  /**
   * 获取列表数据
   */
  function hdlList(res: any) {
    const _params = {
      ...res,
    };
    return api?.list(_params);
  }

  /**
   * 新增模式
   */
  function hdlOpen() {
    modalRef.value.setProps({ title: modalMap.create, isEdit: true });
    modalRef.value.openModal();
  }

  /**
   * 编辑模式
   * @param record  行数据
   */
  function hdlEdit(record: any = {}) {
    console.log('record', record);
    modalRef.value.setProps({ title: modalMap.update, isEdit: true, record: record });
    modalRef.value.openModal();
  }

  // 返回hook的公共方法和响应式数据
  return {
    modalRef,
    tableRef,
    hdlOpen,
    hdlEdit,
  };
}
